package com.linkwechat.common.component;

import com.alibaba.fastjson.TypeReference;

import java.util.concurrent.TimeUnit;

public interface RedisService {
    /**
     * <p>功能描述: [对应key-value存入缓存] </p>
     * @Title set
     * @param key .
     * @param value .
     * @return boolean
     */
    public void set(final String key, Object value);



    /**
     * <p>功能描述: [存入缓存并设置时效] </p>
     * @Title set
     * @param key .
     * @param value .
     * @param expireTime 秒.
     * @return boolean
     */
    public void set(final String key, Object value, Long expireTime);

    /**
     * <p>功能描述: [删除] </p>
     * @Title remove
     * @param keys .
     * @CreateDate 2019年9月6日 上午9:03:17
     * @update 2019年9月6日 上午9:03:17
     */
    public void remove(final String... keys);



    /**
     * <p>功能描述: [判断该key是否存在] </p>
     * @Title exists
     * @param key .
     * @return boolean
     * @CreateDate 2019年9月6日 上午9:03:56
     * @update 2019年9月6日 上午9:03:56
     */
    public boolean exists(final String key);

    /**
     * <p>功能描述: [获取对应key的value] </p>
     * @Title get
     * @param key .
     * @return Object
     * @CreateDate 2019年9月6日 上午9:04:26
     * @update 2019年9月6日 上午9:04:26
     */
    public <T> T get(final String key,Class<T> clazz);

    /**
     * <p>功能描述: [获取对应key的value] </p>
     * @Title get
     * @param key .
     * @return Object
     * @CreateDate 2019年9月6日 上午9:04:26
     * @update 2019年9月6日 上午9:04:26
     */
    <T> T get(final String key, TypeReference<T> tTypeReference);

    void expire(String key, Long time, TimeUnit timeUnit);


}
